package com.sskj.b70.m.http;

import com.lzy.okgo.model.HttpParams;
import com.lzy.okgo.request.GetRequest;
import com.lzy.okgo.request.PostRequest;
import com.sskj.b70.m.StockCoinBean;
import com.sskj.b70.m.bean.AddressList;
import com.sskj.b70.m.bean.AgentNumBean;
import com.sskj.b70.m.bean.AppVersionBean;
import com.sskj.b70.m.bean.AseetListBean;
import com.sskj.b70.m.bean.Banner;
import com.sskj.b70.m.bean.CapitalDetailData;
import com.sskj.b70.m.bean.CoinFee;
import com.sskj.b70.m.bean.CoinFeeBean;
import com.sskj.b70.m.bean.CommissionBean;
import com.sskj.b70.m.bean.CustomListBean;
import com.sskj.b70.m.bean.DagBean;
import com.sskj.b70.m.bean.Entrust;
import com.sskj.b70.m.bean.FabiBuyBean;
import com.sskj.b70.m.bean.FabiDetailListBean;
import com.sskj.b70.m.bean.FabiListBean;
import com.sskj.b70.m.bean.FabiOrderBean;
import com.sskj.b70.m.bean.FabiPublishListBean;
import com.sskj.b70.m.bean.HaiPageBean;
import com.sskj.b70.m.bean.HttpData;
import com.sskj.b70.m.bean.LevelVolumeBean;
import com.sskj.b70.m.bean.Notice;
import com.sskj.b70.m.bean.NoticeList;
import com.sskj.b70.m.bean.PageData;
import com.sskj.b70.m.bean.PayWayBean;
import com.sskj.b70.m.bean.RechargeInfoBean;
import com.sskj.b70.m.bean.StockBean;
import com.sskj.b70.m.bean.SysConfigBean;
import com.sskj.b70.m.bean.TradeInfoBean;
import com.sskj.b70.m.bean.TradePositionListBean;
import com.sskj.b70.m.bean.TransactionModel;
import com.sskj.b70.m.bean.UserBean;
import com.sskj.b70.m.bean.UserCoinInfo;
import com.sskj.b70.m.bean.UserInfo;
import com.sskj.b70.m.bean.XiTongBean;
import com.sskj.b70.m.bean.bean.FbShop;
import com.sskj.b70.p.activity.InviteFriendPresenter;

import java.io.File;
import java.util.HashMap;
import java.util.List;


/**
 * 作者 :吕志豪
 * 简书：https://www.jianshu.com/u/6e525b929aac
 * github：https://github.com/lvzhihao100
 * 描述：
 * 创建时间：2018-07-27 13:39
 */
public interface IHttpService {
    /**
     * 登录
     *
     * @param mobile 手机号
     * @param pws    密码（md5加密）
     * @return
     */
    PostRequest<HttpData<UserBean>> login(String mobile, String pws);

    /**
     * 注册
     *
     * @param mobile 手机号
     * @param type
     * @return
     */
    GetRequest<HttpData> sendCode(String mobile, String type);

    /**
     * 根据币种推送
     *
     * @param code 币种类型
     * @return
     */
    WebSocketObserver pushCoinType(String code);

    WebSocketObserver pushCoinFive(String code);

    /**
     * 获取app新版本信息
     */
    PostRequest<HttpData<AppVersionBean>> getVersion();

    /**
     * 获取用户信息
     *
     * @return
     */
    GetRequest<HttpData<UserInfo>> getUserInfo();

    PostRequest<HttpData> registerConfirm(String account, String password, String code, String tjuser);

    /**
     * 实名认证
     */
    PostRequest<HttpData> verifyIdentConfirm(String realName, String identNum, HashMap<String, Object> params);

    /**
     * 安全中心重置密码
     */
    GetRequest<HttpData> resetPwd(String account, String passwordOrigin, String password);

    /**
     * 获取C2C出售/购买列表
     */
    PostRequest<HttpData<HaiPageBean<FabiListBean>>> getFbList(int page, int size, boolean isBuy);

    /**
     * 查询用户下单记录
     *
     * @return
     */

    GetRequest<HttpData<HaiPageBean<TradePositionListBean>>> getBillList(int type);

    /**
     * 创建杠杆交易订单
     *
     * @param stockData
     * @param entrustLot
     * @param buyPrice
     * @param stockCode
     * @param billPriceType
     * @param buyBillType
     * @param stopProfit
     * @param stopLoss
     * @param isTime
     * @return
     */

    PostRequest<HttpData> createLevelOrder(StockBean stockData, String entrustLot, String buyPrice, String stockCode, int billPriceType, int buyBillType, String stopProfit, String stopLoss, boolean isTime);

    /**
     * 取消杠杆交易的委托单
     *
     * @param id
     * @return
     */
    PostRequest<HttpData> cancelLevelOrder(String id);

    /**
     * 关闭杠杆交易的持仓单
     *
     * @param hold_id
     * @return
     */
    PostRequest<HttpData> closeLevelOrder(String hold_id, String newPrice);


    /**
     * 设置交易密码--获取短信验证码
     */
    GetRequest<HttpData> getTradeSms(String account);

    /**
     * 设置交易密码--设置交易密码
     */
    PostRequest<HttpData> setTradePwd(String id, String tradePwd, String code);

    /**
     * 安全中心---申请成为商家
     */
    PostRequest<HttpData> applyShop(String id, String isShopStatus);

    /**
     * 安全中心---成为商家所要冻结保证金
     */
    PostRequest<HttpData<List<FbShop>>> moneyUsed(String name, String type);

    /**
     * 安全中心---支付列表
     */
    PostRequest<HttpData<List<PayWayBean>>> getPayList();

    /**
     * 公告列表
     */
    PostRequest<HttpData<HaiPageBean<NoticeList>>> getGGList(int number);

    /**
     * 获取产品信息
     *
     * @param code
     * @return
     */
    PostRequest<HttpData<List<StockCoinBean>>> getProduct(String code);

    /**
     * 公告列表--单条具体信息
     */
    PostRequest<HttpData<Notice>> ggDetail(String id);

    /**
     * 经纪人
     */
    PostRequest<HttpData> applyAgent(String id, String code);

    /**
     * 经纪人--管理总
     */
    GetRequest<HttpData<AgentNumBean>> applyAgentList();

    /**
     * 经纪人--管理总--佣金明细
     */
    GetRequest<HttpData<HaiPageBean<CommissionBean>>> agentMoneyDetail(int page, String dateFrom, String dateTo);

    /**
     * 经纪人--管理总--我的客户
     */
    GetRequest<HttpData<HaiPageBean<CustomListBean>>> myClient(int page);

    /**
     * 安全中心---添加支付方式
     */
    PostRequest<HttpData<Object>> addZhiFu(HttpParams params);

    /**
     * 安全中心---支付方式--开启关闭
     */
    PostRequest<HttpData> closeOrUp(PayWayBean item);

    /**
     * C2C交易发布订单
     *
     * @param type
     * @param sumCount
     * @param lowCount
     * @param hightCount
     * @param unitPrice
     * @param payWx
     * @param payAli
     * @param payBank
     * @param remark
     * @return
     */
    PostRequest<HttpData> createFabiOrder(String type, String sumCount, String lowCount, String hightCount, String unitPrice, int payWx, int payAli, int payBank, String remark);

    /**
     * 取消C2C发布的订单
     *
     * @param isBuy
     * @param id
     * @return
     */
    PostRequest<HttpData> cancelFabiPublishOrder(boolean isBuy, String id);

    /**
     * 取消C2C匹配到的交易的订单
     *
     * @param orderNum
     * @return
     */
    PostRequest<HttpData> cancelFabiTradeOrder(String orderNum);

    /**
     * 获取用户该币的信息 可用
     *
     * @param code
     */
    PostRequest<HttpData<UserCoinInfo>> getCoinTypeInfo(String code);

    /**
     * 创建币币交易订单
     *
     * @return
     */
    PostRequest<HttpData<String>> creatCoinOrder(String code, String price, String num, int tradeType, int billPriceType);

    /**
     * 关于我们
     */
    PostRequest<HttpData<List<XiTongBean>>> aboutMine();

    /**
     * 提币地址列表
     */
    GetRequest<HttpData<AddressList>> coinList();

    /**
     * 提币地址--添加
     */
    PostRequest<HttpData> addCoin(String address, String notes, String account, String type,String code);

    /**
     * 提币地址--删除
     */
    PostRequest<HttpData> deleteCoin(String id);

    /**
     * 经纪人--我的推广
     */
    PostRequest<HttpData<InviteFriendPresenter.QRBean>> inviteCodeUrl(String id);

    /**
     * 资产管理---资产列表
     */
    PostRequest<HttpData<List<AseetListBean.AseetBean>>> assetList(String id);


    /**
     * 资产管理---资产列表--资产明细
     */
    PostRequest<HttpData<CapitalDetailData>> assetListDetail(String assetId, String stockCode, int page);

    /**
     * 资产管理---资产列表--资产明细--充值&&提现
     */
    GetRequest<HttpData<CapitalDetailData>> czAndTx(String assetId, String stockCode, String type, int page);

    /**
     * 资产管理---资产列表--充值
     */
    PostRequest<HttpData<RechargeInfoBean>> czDetail(String type,String code);


    /**
     * 获取C2C发布单子列表
     *
     * @param page
     * @param isBuy
     * @param startTime
     * @param endTime
     * @return
     */
    PostRequest<HttpData<HaiPageBean<FabiPublishListBean>>> getFabiPublishOrderList(int page, boolean isBuy, String startTime, String endTime);

    /**
     * 获取系统配置信息
     *
     * @param type
     * @return
     */
    PostRequest<HttpData<List<SysConfigBean>>> getSysConfig(int type);

    /**
     * 查询用户资金明细
     *
     * @return
     */
    GetRequest<HttpData<TradeInfoBean>> getCapitalInfo();

    /**
     * 获取币币交易列表数据
     *
     * @param code
     * @param tradeType 买卖类型 1 买 2 卖
     * @return
     */

    PostRequest<HttpData<HaiPageBean<Entrust>>> getCoinEntrustList(String code, String tradeType, String state);

    PostRequest<HttpData<HaiPageBean<Entrust>>> getCoinEntrustListAll(String code, String tradeType, String state);

    PostRequest<HttpData<HaiPageBean<Entrust>>> getCoinEntrustingList(String code);

    /**
     * 资金管理---提币--获取手续费等字段
     */
    PostRequest<HttpData<CoinFeeBean>> getCoin(String code);

    /**
     * 资金管理---提币--提币申请
     */
    PostRequest<HttpData> extractCoin(String id, String usdFee, String tradePwd, String code, String walletAddr, String stockCode);


    /**
     * 获取币币交易上下列表数据
     *
     * @param code
     */
    PostRequest<HttpData<TransactionModel>> getPankou(String code);

    /**
     * C2C交易---下单
     */
    PostRequest<HttpData<FabiBuyBean>> coinOrder(String tpwd, String order_no, String total_num, String total_price, int isBuy, String id, String payType);

    /**
     * C2C交易---交易列表--详细
     */
    PostRequest<HttpData<FabiOrderBean>> tradeListDetail(String tradeType, String entrustNo);

    /**
     * C2C交易---交易列表
     */
    PostRequest<HttpData<HaiPageBean<FabiDetailListBean>>> tradeList(String tradeType, String entrustNo);

    /**
     * C2C交易---标记已付款
     */
    PostRequest<HttpData> endTrade(String id, String entrustNo);

    /**
     * C2C交易---订单申诉
     */
    PostRequest<HttpData> ssReason(String id, String tradeId, String ssType, String mark);

    /**
     * C2C交易---确认放行
     */
    PostRequest<HttpData> confirmFx(String id, String tradeId, String tradePwd);

    /**
     * 获取杠杆成交量数据
     *
     * @param code
     * @return
     */
    GetRequest<HttpData<List<LevelVolumeBean>>> getLevelVolumeList(String code, int page);

    /**
     * 取消币币交易的单子
     *
     * @param order_id
     * @return
     */
    PostRequest<HttpData<String>> cancelCoinOrder(int tradeType, String order_id);

    /**
     * 获取币币交易手续费
     *
     * @return
     */
    PostRequest<HttpData<List<CoinFee>>> getCoinFee(String name);

    /**
     * 获取Banner图
     */
    PostRequest<HttpData<Banner>> getBannerImage();


    PostRequest<HttpData> sendEmailCode(String email);

    PostRequest<HttpData> registerWithEmail(String email, String password, String code, String invitationCode);

    PostRequest<HttpData<UserBean>> loginWithEmail(String mobile, String pws);

    PostRequest<HttpData> bindMobile(String mobile, String code);

    GetRequest<HttpData<PageData<DagBean>>> getDagList(int page, int type);

    PostRequest<HttpData> resetPwdWithEmail(String email, String pwd, String code);

    PostRequest<HttpData<String>> uploadImg(File file);


    PostRequest<HttpData> checkIdent(String username, String idCardNo, String idCardFrontImg, String idCardBackImg, String selfieImg);


    PostRequest<HttpData> addPayWay(String payId ,String payType, String tradePwd, String wxAccount, String wxImg, String alipayAccount, String aliImg, String bankCardNo, String bankCardOpenBank, String bankCardType);
}

